/*
 * @(#)TextMethodsEnglishDVMRP.java	Robert Denda&Didier Gutacker
 */

/** 
 *
 * @author 	Robert Denda&Didier Gutacker
 * @version     1.1, 06.09.97
 * @see TextMethods
 * @see TextMethodsEnglish
 * @see TextMethodsEnglishRIP
 */

public class TextMethodsEnglishDVMRP extends TextMethodsEnglish {
  TextMethodsEnglishDVMRP() {
    super();
    appletText = new String( "Multicast Routing - DVMRP (Our version)" );
    frameTitle = new String( "Simulation of Multicast Routing - DVMRP (Our Version) with fine tuning" );
    buttonPanel_sendPruningMessageButtonText = new String( "prune" );
    buttonPanel_sendGraftingMessageButtonText = new String( "graft" );
    infoText = new String("Simulation of Multicast Routing Algorithms\n\n" +
			   "This simulation visualizes and simulates the different\n" +
			   "routing algorithms as utilized by the\n" + 
			   "Distance Vector Multicast Routing Protocol (DVMRP) v3\n\n" +
                           "(c) 1997 by Robert Denda, University of Mannheim, Germany\n" );

    helpText1 = new String( "Help for DVMRP-Routing-Simulation" );

   
    helpText2 = new String( "This simulation shows the creation of the routingtable\n"
			   +"on the one hand and the routing of datapackets through\n"
			   +"the network on the other hand.\n\n"
                           +"A description of the buttons and tags follows :\n\n"
			   +"Menu Window : New : clean network\n"
			   +"              End : close the simulationwindow\n\n"
			   +"Menu Edit   : choose Simulationspeed\n"
			   +"              switch to Language\n"
			   +"              enable speech : as it says - audio support\n"
			   +"              (not implemented yet !!!!)\n"
			   +"              start demo : start demo-mode\n\n"
			   +"Menu Help   : About : about this simulation\n"
			   +"               Help : this window\n\n"
			   +"Button add Node      : add node\n\n"
			   +"Button remove Node   : remove choosen node\n\n"
			   +"Button inspect Node  : show routingtable of choosen node\n"
			   +"Button add Link      : add link between the two choosen nodes\n"
			   +"Button remove Link   : remove choosen link\n\n"
                           +"Button start sending : start sending Datapackets from\n"
                           +"                       choosen node\n\n"
			   +"Button stop sending  : stop choosen sender\n\n"
                           +"Button continue      : resume simulation\n\n"
			   +"Button pause         : suspend simulation\n\n");


    demoGreetings = 
      new String(   "Welcome to a demonstration of multicast routing algorithms.\n\n"
		  + "This demo will explain the Distance Vector Multicast Routing"
		  + "Protocol (DVMRP) v3\n\n" 
		  + "At any point of this demonstration, you can interact and\n"
		  + "thereby change the behaviour of the simulated network archi-\n"
		  + "tecture.\n\n"
		  + "Please press 'Okay' to start the demo.\n" );
    demoPart1 =
      new String(   "Let's pause here for a second.  You have just seen how\n" 
		  + "the two routers \"Node 0\" and \"Node 1\" got connected\n"
		  + "via \"link 0\".  When getting connected to a new link, \n"
		  + "a node informs the node on the other end of the link about\n"
		  + "its existence.  This was the first (blue) \"routing table\n"
		  + "update\" packet.  Then, it sends a (magenta) \"routing\n"
		  + "table request\" packet, indicating that it wants to be\n"
		  + "informed about other nodes in the network.  Upon receiving\n"
		  + "a new route, the router updates its routing table accor-\n"
		  + "dingly and sends a (blue) \"routing table update\" packet\n"
		  + "to all neighbours (in this case, there is only one).\n\n"
		  + "Note that the routers use the \"poison reverse\" technique.\n"
		  + "When applying the \"poison reverse\" technique, entries in\n"
		  + "a (blue) \"routing table update\" packet that have the same\n"
                  + "link as their next hop interface via which the \"routing\n"
		  + "table update\" is sent will lie about their real distance to\n"
		  + "the destination node by adding \"infinity\" to the metric.\n"
		  + "This is needed to minimize the risk of \"counting-to-\n"
                  + "infinity loops\" and for reverse path broadcasting (RPB)\n\n"
                  + "We will proceed now and add some more nodes and links.  Feel\n"
                  + "free to inspect the nodes' routing tables at any time.\n\n"
		  + "Please press 'Okay' to continue the demo.\n" );
    demoPart2 =
      new String(   "Observe now how the entries in the Routing Table of \"node 1\" " 
                  + "change when a new link gets connected.\n"
                  + "Especially note the changes under \"Forward to\" which represent"
		  + "the links to which the router will forward multicast packet that"
		  + "arrive on the corresponding incoming link of the node.\n\n"
		  + "Please press 'Okay' to continue.\n" );

    demoPart3 =
      new String(   "Now, \"node 2\" will start to send multicast packets.\n"
		  + "Observe how packets will only be forwarded on the shortest path.\n\n"
		  + "Please press 'Okay' to continue.\n" );
    demoPart4 =
      new String(   "Now, another link will be connected to \"node 1\" and you will be\n"
		  + "able to observe how the routers learn the new net topology via\n"
		  + "routing table updates.  Note how the forwarding of routing\n"
		  + "tables changes to the now shortest paths.\n\n" 
		  + "Please press 'Okay' to continue.\n" );
    demoPart5 =
      new String(   "In the following, the extensions of RRPM (Reverse Path\n"
		  + "Multicasting) to RPB (Reverse Path Broadcasting) will be\n"
		  + "demonstrated.  Routers can send pruning messages to inform\n"
		  + "their upstream neighbour in the multicast tree that they are\n"
		  + "currently not interested in further multicast packets\n"
		  + "Upon receiving the pruning message, the upstream neighbour\n" 
		  + "will only forward arriving multicast packets of this multicast\n"
		  + "stream if their are downstream routers that are interested in\n"
		  + "receiving them.  If there are not any downstream neighbours\n"
		  + "interested in the multicast packets, the router will send a\n"
		  + "pruning message to its upstream neighbour, which then performs\n"
		  + "an identical check and potentially propagates the pruning mes-\n"
		  + "sage to its upstream neighbour, ...\n\n"
		  + "Once a router has pruned a downstream neighbour it will start\n"
		  + "a count-down timer for this neighbour.  Upon timer time-out,\n"
		  + "the downstream neighbour will be \"unpruned\" and has to send\n"
		  + "another pruning message to leave the multicast stream.\n\n"
		  + "Please press 'Okay' to continue.\n" );
    demoPart6 =
      new String(   "To re-join the multicast packet stream, DVMRP provides the\n"
		  + "so called \"grafting messages\".  Grafting messages can be\n"
		  + "sent to the upstream neighbour to signal that there is some-\n"
		  + "body dependent on this router that wants to join the multicast\n"
		  + "session.  Upon receiving a grafting message, a router will\n"
		  + "unprune the previously pruned downstream neighbour's branch\n"
		  + "in the multicast tree and start forwarding multicast packets.\n"
		  + "Grafting messages have to be propagated and an acknowledgment\n"
		  + "has to be sent to the downstream neighbour that requested it.\n"
		  + "The acknowledgment is necessary s.t. the router that has sent the\n"
		  + "grafting message can distinguish between a lost grafting mes-\n"
		  + "sage and a situation where the multicast sender has finished\n"
		  + "sending.\n"
		  + "In the following you will see how the re-joining of node 4 and\n"
		  + "5 is processed.\n\n"
		  + "Please press 'Okay' to continue.\n" );
    demoEnd =
      new String(   "The demonstration of DVMRP v3 is now finished.\n\n"
		  + "You may continue to extend, restructure and inspect the\n"
                  + "network.\n\n"
		  + "Please press 'Okay' to continue.\n" );
    multicastPacketText = new String( "multicast packet" );
    pruningPacketText = new String( "prune message" );
    graftingPacketText = new String( "graft message" );
    graftingPacketAckText = new String( "graft acknowledgment" );
    receivedPruningPacketText = new String( "received pruning message" );
    receivedGraftingPacketText = new String( "received grafting message" );
    receivedGraftingPacketAckText = new String( "received grafting acknowledgment" );
  } // TextMethodsEnglish.TextMethodsEnglish
} // TextMethodsEnglish
